home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / complex / screen.c < prev   
C/C++ Source or Header  |  2000-05-22  |  2KB  |  81 lines

  1. #include <iocslib.h>
  2. #include <doslib.h>
  3.  
  4. /* 画面の初期化 */
  5. /* 512×512ドット,ピクセル比1:1,65536色 */
  6. void init_screen()
  7. {
  8.   volatile unsigned short *p;
  9.   int ssp;
  10.  
  11.   /* ファンクションキー表示を消す */
  12.   C_FNKMOD(3);
  13.  
  14. #if 0
  15.   CRTMOD(12);
  16.   G_CLR_ON();
  17. #endif
  18.  
  19.   /* スーパーバイザモードへ移行 */
  20.   ssp = B_SUPER(0);
  21.  
  22.   /* 垂直帰線期間を待つ */
  23.   while ((*((volatile unsigned char *)0x00e88001) & 0x10) == 0);
  24.   while ((*((volatile unsigned char *)0x00e88001) & 0x10) != 0);
  25.  
  26.   /* ビデオコントローラの設定(65536色,SPRITE>TEXT>GRAPHIC) */
  27.   *((volatile unsigned short *)0x00e82400) = 0x0003;
  28.   *((volatile unsigned short *)0x00e82500) = 0x06e4;
  29.   *((volatile unsigned short *)0x00e82600) = 0x006f;
  30.  
  31.   /* CRTCのレジスタの設定(512×512ドット,ピクセル比1:1,65536色) */
  32.   p = (volatile unsigned short *)0x00e80000;
  33.   if ((p[20] & 0xff) > 0x16) {
  34.     /* 画面モードが低くなる */
  35.     p[20] = 0x0316;  /* メモリモードセット/表示モードセット */
  36.     p[1] = 0x000e;  /* 水平同期終了位置 */
  37.     p[2] = 0x002c;  /* 水平表示開始位置 */
  38.     p[3] = 0x006c;  /* 水平表示終了位置 */
  39.     p[4] = 0x0237;  /* 垂直トータル */
  40.     p[5] = 0x0005;  /* 垂直同期終了位置 */
  41.     p[6] = 0x0028;  /* 垂直表示開始位置 */
  42.     p[7] = 0x0228;  /* 垂直表示終了位置 */
  43.     p[0] = 0x0089;  /* 水平トータル */
  44.   } else {
  45.     /* 画面モードが同じか高くなる */
  46.     p[0] = 0x0089;  /* 水平トータル */
  47.     p[1] = 0x000e;  /* 水平同期終了位置 */
  48.     p[2] = 0x002c;  /* 水平表示開始位置 */
  49.     p[3] = 0x006c;  /* 水平表示終了位置 */
  50.     p[4] = 0x0237;  /* 垂直トータル */
  51.     p[5] = 0x0005;  /* 垂直同期終了位置 */
  52.     p[6] = 0x0028;  /* 垂直表示開始位置 */
  53.     p[7] = 0x0228;  /* 垂直表示終了位置 */
  54.     p[20] = 0x0316;  /* メモリモードセット/表示モードセット */
  55.   }
  56.  
  57.   /* HRLビットクリア */
  58.   *((volatile unsigned char *)0x00e8e007) &= ~0x02;
  59.  
  60.   /* ユーザモードに戻る */
  61.   if (ssp >= 0) {
  62.     B_SUPER(ssp);
  63.   }
  64.  
  65.   /* コンソールのサイズは64桁×32行 */
  66.   B_CONSOL(0, 0, 64-1, 32-1);
  67.  
  68.   /* コンソールをクリア */
  69.   B_CLR_AL();
  70.  
  71.   /* コンソールのカーソルを消す */
  72.   B_CUROFF();
  73. }
  74.  
  75. /* 画面の後始末 */
  76. void tini_screen()
  77. {
  78.   /* コンソールのカーソルを元に戻す */
  79.   B_CURON();
  80. }
  81.